Forum des exercices du projet Zuul

7.9

  
 
Avatar anonfirstname2 anonlastname2
7.9
par anonfirstname2 anonlastname2, dimanche 7 février 2021, 20:43
 
  1. Lire la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).
    AIDE : a += b; est équivalent à a = a + b;

  2. Relire la ressource A3P(AL) sur la HashMap
    AIDE : Comme la classe HashMap, la classe Set doit être importée avant d'être utilisée :
    import java.util.LaClasse;

  3. Look up the keySet method in the documentation of HashMap. What does it do ?
    (key=clé, set=ensemble)

Explications sur la forme  for ( X y : z )  qui n'a rien à voir avec la forme  for ( x ; y ; z ) :

  • Cette boucle est appelée boucle for each (pour chaque), mais on n'écrit pas le each, juste for.
  • On la distingue aisément de l'autre forme, car elle n'a pas 2 séparateurs ; mais un seul séparateur :
  • z est la collection que l'on veut parcourir, par exemple un ensemble de String retourné par la fonction keySet.
  • X est le Type des éléments de la collection, donc le type de chaque élément qu'on va extraire de cette collection, par exemple String.
  • y est un nom de variable pour contenir à chaque tour de boucle l'élément suivant de la collection :
    X y constitue donc une déclaration de variable de type X, par exemple String vExit
  • for ( String vExit : vExits ) se lit : pour chaque chaîne de caractères vExit de la collection vExits, faire ...
Avatar Florent DUPONT
Re: 7.9
par Florent DUPONT, jeudi 15 février 2018, 19:06
 

Bonjour,

J'ai deux problèmes que je n'arrive pas à résoudre.

J'ai un souci de compilation avec ce code, il est dit que le compilateur ne trouve pas la classe Set.
Mais également, je ne comprend pas la formulation du code en Gras :

.../... code supprimé pour ne pas influencer les futurs lecteurs .../...

for(String exit : keys)

.../... code supprimé pour ne pas influencer les futurs lecteurs .../...

Avatar Jonathan MORELL
Re: 7.9
par Jonathan MORELL, vendredi 18 avril 2014, 19:05
 

En effet, il faut que tu l'inclut dans ta classe. Pour ce faire, tu dois regarder dans la javadoc sur internet dans quel package est présent la classe. Je crois que c'est dans le package util. (include java.util.Set;).

La commande en gras est un for each. Elle permet de récupèrer toutes les strings associes à aExit. Chaque tour de la boucle, elle récupère une String de keys qui est stoqué dans exit. keys est une collection contenant tous les strings associes aux sorties. La méthode keySet() a permis de récupérer toutes les Strings de la hashmapde aExit.

Avatar Denis BUREAU
Re: 7.9
par Denis BUREAU, samedi 19 avril 2014, 14:23
 

Juste une précision sur le premier point :

en java, ce n'est pas include mais import.

Avatar Denis BUREAU
Re: 7.9
par Denis BUREAU, mercredi 30 septembre 2015, 20:17
 

Un étudiant a écrit :

J'ai donc bien compris l'exercice 7.7 et j'ai aussi réussis le 7.9 cependant j'aurai une question de compréhension. 

Set<String> keys = exits.keySet();

Je comprends que les clés de l'objet Hashmap doivent être de type String cependant je ne comprends pas le Set<> et le "exits."


Avatar Denis BUREAU
Re: 7.9
par Denis BUREAU, mercredi 30 septembre 2015, 20:37
 

Effectivement, ce code serait plus facile à comprendre s'il était écrit avec les conventions de l'unité IGI-3007 :

Set<String> vKeys = this.aExits.keySet();

- exits n'est autre que la HashMap des sorties qui a été déclarée en attribut

Set (en français, 'ensemble' au sens mathématique) est un container d'éléments de même type, mais qui, comme en maths, ne peut pas contenir 2 fois le même élément.

Avatar Denis BUREAU
Re: 7.9
par Denis BUREAU, jeudi 15 février 2018, 19:34
 

Un étudiant a écrit :

Je bloque sur cet exercice.
En effet, quand je met la ligne de code :
"Set<String> vKeys = this.exits.keySet();"

le logiciel me dit que la classe Set n'existe pas.

je ne comprend pas par quoi la remplacer ou si je dois créer une classe Set.

Avatar Denis BUREAU
Re: 7.9
par Denis BUREAU, jeudi 15 février 2018, 19:39
 

Ni la remplacer, ni la créer !

Comme nous l'avons vu au cours 3, la classe Set est une classe du JDK qui sert à représenter/manipuler des ensembles.

Comme nous l'avons vu au cours 3, les classes Scanner, HashMap, et ici Set (et bientôt d'autres) sont dans un répertoire spécial, et il est nécessaire de les importer au début de votre fichier .java.

Avatar Nathan SAUCET
Re: 7.9
par Nathan SAUCET, vendredi 9 octobre 2020, 14:54
 

Bonjour M. Bureau,

j'ai très bien compris l'exercice, cependant j'ai une proposition de modification du code de la méthode getExitString que j'aimerai que vous validiez si elle est correcte :

    public String getExitString() {
        StringBuilder vStr = new StringBuilder(); 
        vStr.append(this.getDescription()+"\n");
        vStr.append("Exits: ");
        for (Map.Entry vEntry : aExits.entrySet()) {
            if(vEntry.getValue()!=null) { vStr.append(vEntry.getKey()+" "); }
        }
        return vStr.toString();
    } // getExitString() 

- j'utilise un StringBuilder car l'exécution est plus rapide lors d'une boucle au lieu de faire vMaString += "blabla"

- je test si la valeur est null avant d'ajouter la clé ( je ne sais si cela est nécessaire )

Avatar Denis BUREAU
Re: 7.9
par Denis BUREAU, vendredi 9 octobre 2020, 18:02
 
  • L'idée d'utiliser un StringBuilder est bonne, mais ne sera vue qu'à l'exercice 18.2.
  • L'idée d'utiliser Map.Entry est à mon avis mauvaise, car moins claire que la syntaxe directe proposée dans le livre ; ce concept ne sera pas vu dans cette unité.
  • Le test de null n'est nécessaire que si vous avez stocké cette «valeur» dans la HashMap, ce qui n'est pas prévu a priori.